#ifndef LCDCOMMAND_H
#define LCDCOMMAND_H
#include <string>
#include <AnalyzerTypes.h>

class ILCDCommand
{
public:
    ILCDCommand() {}
    virtual ~ILCDCommand() {}
public:
    virtual const char* GetName() = 0;
    virtual const char* GetText( U8 Parameter ) = 0;

protected:
    std::string Buffer;
};

class CommandNoop : public ILCDCommand
{
public:
    CommandNoop() {}
    virtual ~CommandNoop() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandClear : public ILCDCommand
{
public:
    CommandClear() {}
    virtual ~CommandClear() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandHome : public ILCDCommand
{
public:
    CommandHome() {}
    virtual ~CommandHome() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetMode : public ILCDCommand
{
public:
    CommandSetMode() {}
    virtual ~CommandSetMode() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetDisplay : public ILCDCommand
{
public:
    CommandSetDisplay() {}
    virtual ~CommandSetDisplay() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetCursor : public ILCDCommand
{
public:
    CommandSetCursor() {}
    virtual ~CommandSetCursor() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetInterface : public ILCDCommand
{
public:
    CommandSetInterface() {}
    virtual ~CommandSetInterface() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetCGRAM : public ILCDCommand
{
public:
    CommandSetCGRAM() {}
    virtual ~CommandSetCGRAM() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetDDRAM : public ILCDCommand
{
public:
    CommandSetDDRAM() {}
    virtual ~CommandSetDDRAM() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};



class CommandSetInterface8Bits : public ILCDCommand
{
public:
    CommandSetInterface8Bits() {}
    virtual ~CommandSetInterface8Bits() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetDisplay8Bits : public ILCDCommand
{
public:
    CommandSetDisplay8Bits() {}
    virtual ~CommandSetDisplay8Bits() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetCursor8Bits : public ILCDCommand
{
public:
    CommandSetCursor8Bits() {}
    virtual ~CommandSetCursor8Bits() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetCGRAM8Bits : public ILCDCommand
{
public:
    CommandSetCGRAM8Bits() {}
    virtual ~CommandSetCGRAM8Bits() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandSetDDRAM8Bits : public ILCDCommand
{
public:
    CommandSetDDRAM8Bits() {}
    virtual ~CommandSetDDRAM8Bits() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

class CommandNoop8Bits : public ILCDCommand
{
public:
    CommandNoop8Bits() {}
    virtual ~CommandNoop8Bits() {}
public:
    virtual const char* GetName();
    virtual const char* GetText( U8 Parameter );
};

#endif